﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Lavanderia.Entities;
using System.Data;

namespace Lavanderia.Repository
{
    public class TrabajadorRepository:MasterRepository,ITrabajadorRepository
    {
        public List<TRABAJADOR> GetAllFromTrabajador()
        {
            var query = from c in context.TRABAJADORs.Include("SEXO").Include("ESTADO_CIVIL")
                        select c;
            return query.ToList();
        }

        public List<TRABAJADOR> GetAllFromTrabajadorByCriterio(string criterio)
        {
            var query = from c in context.TRABAJADORs.Include("SEXO").Include("ESTADO_CIVIL").Include("USUARIO")
                        select c;
            if (criterio != null && criterio != string.Empty && criterio != "")
            {
                query = from c in context.TRABAJADORs.Include("SEXO").Include("ESTADO_CIVIL").Include("USUARIO")
                        where c.ApMaterno.ToUpper().Contains(criterio) ||
                        c.ApPaterno.ToUpper().Contains(criterio) ||
                        c.Nombres.ToUpper().Contains(criterio) ||
                        c.Dni.Contains(criterio)
                        select c;
            }
            return query.ToList();
        }

        public TRABAJADOR GetAllFromTrabajadorById(int id)
        {
            var query = from c in context.TRABAJADORs.Include("SEXO").Include("ESTADO_CIVIL")
                        where c.Id.Equals(id)
                        select c;
            return query.SingleOrDefault();
        }

        public TRABAJADOR GetAllFromTrabajadorByDni(string dni)
        {
            var query = from c in context.TRABAJADORs
                        where c.Dni.Contains(dni)
                        select c;
            return query.SingleOrDefault();
        }

        public void AddTrabajador(TRABAJADOR trabajador)
        {
            foreach (var item in trabajador.TELEFONOS_TRABAJADOR)
            {
                item.OPERADOR = null;
                context.Entry(item).State = EntityState.Added;
            }

            trabajador.ESTADO_CIVIL = null;
            trabajador.SEXO = null;

            context.TRABAJADORs.Add(trabajador);
            context.SaveChanges();
        }

        public void UpdateTrabajador(TRABAJADOR trabajador)
        {
            var trabajadorDB = context.TRABAJADORs.Find(trabajador.Id);

            trabajadorDB.ApMaterno = trabajador.ApMaterno;
            trabajadorDB.ApPaterno = trabajador.ApPaterno;
            trabajadorDB.Direccion = trabajador.Direccion;
            trabajadorDB.Dni = trabajador.Dni;
            trabajadorDB.Email = trabajador.Email;
            trabajadorDB.IdEstadoCivil = trabajador.IdEstadoCivil;
            trabajadorDB.Nombres = trabajador.Nombres;
            trabajadorDB.IdSexo = trabajador.IdSexo;
            trabajadorDB.FOTO_TRABAJADOR = trabajador.FOTO_TRABAJADOR;

            foreach (var item in trabajador.TELEFONOS_TRABAJADOR)
            {
                item.OPERADOR = null;
                if (item.Id.Equals(0))
                {
                    item.TRABAJADOR = trabajadorDB;
                    item.OPERADOR = context.OPERADORs.Find(item.IdOperador);
                    context.Entry(item).State = EntityState.Added;
                    trabajadorDB.TELEFONOS_TRABAJADOR.Add(item);
                }
                else
                {
                    item.TRABAJADOR = null;
                    context.TELEFONOS_TRABAJADOR.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                    //item.PERSONA = null;
                }
            }

            context.Entry(trabajadorDB.FOTO_TRABAJADOR).State = EntityState.Modified;
            context.Entry(trabajadorDB).State = EntityState.Modified;
            context.SaveChanges();
        }

        public void DeleteTrabajador(int id)
        {
            var existe = context.TRABAJADORs.Find(id);

            if (existe != null)
            {
                context.TRABAJADORs.Remove(existe);
                context.SaveChanges();
            }
        }
    }
}
